package com.lrs.java.jdbc.jdbc_teacher;
import java.sql.*;
//可更新的结果集
class TestUpdataRs {
	public static void main(String args[]) {
		try {
			new oracle.jdbc.driver.OracleDriver();
			String url = "jdbc:oracle:thin:@127.0.0.1:1521:BJSXT";
			Connection conn = DriverManager
					.getConnection(url, "scott", "tiger");
			
			// Statement st = con.createStatement( type, concurrency);
			// type: 类型
			// ResultSet.TYPE_FORWARD_ONLY( 默认)
			// 		只允许向前访问一次，并且不会受到其他用户对该数据库所作更改的影响
			// ResultSet.TYPE_SCROLL_INSENSITIVE
			// 		允许在列表中向前或向后移动，甚至可以进行特定定位，
			// 例如移至列表中的第四个记录或者从当前位置向后移动两个记录。
			// 不会受到其他用户对该数据库所作更改的影响。
			// 		ResultSet.TYPE_SCROLL_SENSITIVE
			// 象 TYPE_SCROLL_INSENSITIVE 一样，允许在记录中定位。
			// 这种类型受到其他用户所作更改的影响。
			// 如果用户在执行完查询之后删除一个记录，那个记录将从 ResultSet 中消失。
			// 类似的，对数据值的更改也将反映在 ResultSet 中。
			// Concurrency: 并发性
			// ResultSet.CONCUR_READ_ONLY(默认)只读
			// ResultSet.CONCUR_UPDATABLE可以更新

			Statement stmt = conn.createStatement(
					ResultSet.TYPE_SCROLL_INSENSITIVE,
					ResultSet.CONCUR_UPDATABLE);// 该参数确定是否可以更新 ResultSet
			
			ResultSet rs = stmt
					.executeQuery("select empno, ename, mgr, sal from emp2");

			rs.next();
			// 更新一行数据
			rs.updateString("ename", "BBBB");
			rs.updateRow();

			// 插入新行
			rs.moveToInsertRow();
			rs.updateInt(1, 9999);
			rs.updateString("ename", "AAAA");
			rs.updateInt("mgr", 7839);
			rs.updateDouble("sal", 99.99);
			rs.insertRow();
			// 将光标移动到当前行
			rs.moveToCurrentRow();

			System.out.println(rs.getString("sal"));

			// 删除行
			rs.absolute(5);
			rs.deleteRow();
			
		

			// 取消更新
			// rs.cancelRowUpdates();
			
			stmt.close();
			rs.close();

		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}
